docker run

您所在的位置:网站首页 docker expose多个端口 docker run

docker run

#docker run | 来源: 网络整理| 查看: 265

一、背景

如果仅限于使用dockerhub里面的镜像,是没办法满足我们实际的应用场景的,所以我们需要创建属于自己的docker镜像。

构建docker镜像需要编写dockerfile,却不知道语法怎么写。

下文我为大家简介,dockerfile参数,以及相应的作用。

二、dockerfile参数说明 FROM 指定基础镜像 MAINTAINER 维护者名称,自定义,可写可不写 RUN 镜像构建时运行的命令,可以写shell命令也可以写成exec样式【shell样式】 RUN mkdir -p /test/a 【exec样式】 RUN [“mkdir”,“-p”,“/test/a”] EXPOSE 用于指定容器默认映射的端口,端口可以写多个。在docker run -P(大P)时,会自动随机物理机的端口映射 EXPOSE 的端口。 可以使用docker run -p命令指定其他端口。【多个端口】 EXPOSE [port1,port2] EXPOSE [80,8080] CMD 通常用于启动服务,会在docker run时运行只执行一次,如果有多个CMD默认只会执行最后一个。 ENTRYPOINT 类似CMD,通常用于启动服务。指定容器启动后执行的命令,也是多个执行最后一个。 不可被docker run提供的参数覆盖。可以传参运行,docker run 时可以用-c指定变参 【例如】 ENTRYPOINT ["nginx", "-c"] # 定参 CMD ["/etc/nginx/nginx.conf"] # 变参

指定了ENRTYPOINT,在docker run的时候就不要加/bin/bash,不然会运行出错

COPY 用于复制。本地源地址 > 容器内地址 可以指定属主: chown=user:group可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则 【例如】 COPY hom* /mydir/ COPY hom?.txt /mydir/ADD

和COPY一样是复制,但是复制压缩文件时,会自动解压缩。 tar、gzip、bzip2、xz格式复制会自动解压到目标路径 没办法用于复制整个tar文件,要用copy

【用法】 ADD nginx.tar /etc/nginx/ VOLUME 数据卷 定义匿名数据卷,一般是启动时忘记挂载数据卷,并且会自动挂载到定义的匿名数据卷。 在容器创建过程中会在容器中创建该目录,在宿主机上的挂载目录名是随机生成的,在这个目录下/var/lib/docker/volumes/ 【用法】 volume ["/data"] docker run -v 主机目录:容器目录:权限 -itd 镜像名 例如: docker run --name nginx -v /data:/nginx:ro -itd nginx_images 修改挂载点,使用-v会安全点 权限可以为ro只读、rw读写 WORKDIR 用于指定工作目录,如果镜像中对应的路径不存在,会自动创建此目录WORKDIR 中需要指定绝对路径【用法】 WORKDIR /workdir ENV 设置镜像内的环境变量【例如】 # 设置nginx =/usr/share/nginx/html/, 在后续的指令中可以通过$nginx引用: ENV nginx /usr/share/nginx/html/ COPY index.html $nginx USER 用于指定执行后续命令的用户和用户组用户和用户组必须提前已经存在【用法】 USER user_name/uid USER user:group USER uid:gid ONBUILD 配置当前所创建的镜像,后续被作为其它新创建镜像的基础镜像时,执行的命令。 创建的镜像A配置了这个命令,后续镜像A被作为基础镜像,创建镜像B时会执行。【例如】 # 后续创建的目录会自动重新上传dockerfile目录里的index.html文件 ONBUILD COPY index.html /usr/share/nginx/html/ LABEL 用来给镜像添加一些元数据(metadata),可以指定多个可以使用docker inspect命令查看label【例如】 LABEL image.version="1.0" 【多个LABLE方法1,用“\”换行写】 LABEL image.version="1.0" \ image.creator="wbh" 【多个LABLE方法2】 LABEL image.version="1.0" image.creator="wbh" HEALTHCHECK 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。【语法】 HEALTHCHECK [] CMD --interval=:两次健康检查的间隔,默认为 30 秒。 --timeout=:健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒。 --retries=:当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次。 --start-period=: 应用的启动的初始化时间,在启动过程中的健康检查失效不会计入,默认 0 秒(从 V17.05 引入)。 在 HEALTHCHECK [选项] CMD 后面的命令,格式和 ENTRYPOINT 一样,分为 shell 和 exec 格式。命令的返回值决定了该次健康检查的成功与否: 0:成功 1:失败 2:保留值,不要使用 ARG 用于构建参数,和ENV的作用差不多。但是ARG设置的是局部变量,只在dockerfile里面生效. 在docker build的时候生效,构建镜像后此局部变量会不存在。

在docker build 时可以使用 --build-arg 定义变量的值。不建议在构建时使用ARG传递密钥、用户凭证等信息,因为构建时的信息任何用户都可以通过docker history看到

三、nginx例子

nginx的dockerfile模板。

需要有个基础的镜像,基于这个镜像创建自定义的镜像,可以使用官方的centos镜像 docker pull centos

注意:构建镜像的文件名必须为dockerfile,目录可以自定义

3.1 需要先创建个dockerfile目录mkdir /nginx/3.2 在dockerfile目录下创建dockerfile文件vim /nginx/dockerfile FROM centos MAINTAINER daoxiang RUN yum install wget -y RUN yum install nginx -y COPY index.html /usr/share/nginx/html/ EXPOSE 80 ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"] #创建index.html文件 vim /nginx/index.html hello,world!!!3.3 构建镜像的命令docker build -t “images_name:tag” dockerfile_path -t 用于命名镜像名和版本 -f 指定dockerfile目录的绝对路径 #制作镜像 docker build -t “wbh/nginx:v1” /nginx/3.4 创建容器#基于自己的镜像创建容器 docker run -itd -p 80 --name=nginx wbh/nginx:v13.5 测试nginx是否正常运行#查看容器地址 docker inspect nginx # curl 容器ip curl 172.17.0.2 # 显示出hello,world! 就成功了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3